/******************************************************************************
** 公司名称：天津柯迪斯科技有限公司
** 版权信息：
** 文件名称： App_Parameter.h
** 模块名称： KD986_New参数配置模块头文件
** 版 本 号： V1.0
** 作    者： 蒲磊
** 
** 修改记录： 版本     修改人      时间         修改内容
**
******************************************************************************/
#ifndef __APP_PARAMETER_H_
#define __APP_PARAMETER_H_

/******************************************************************************
* 头文件
******************************************************************************/
#include "bsp.h"
/******************************************************************************
* 宏定义 ('#define')                             
******************************************************************************/
#define			CURRENT_VER			0xBB										    /*当前参数版本号，可用于判断是否需要更新参数*/		
#define         RESET_FLAG_ADDRESS  0x0800FC00                                      /*恢复默认参数的标志所在的地址（单片机内部Flash地址，63K地址开头）*/

#define			VOLTAGE_REF_ADDRESS	04			                                    /*电压基准参数保存地址*/
#define			PHOTODIODE_ADDRESS	(VOLTAGE_REF_ADDRESS + 16)                    	/*光敏二极管校准值保存地址，给电压校准值留16字节的空间*/
#define 		RIDING_ADDRESS		(PHOTODIODE_ADDRESS + 12)                       /*骑行信息保存起始地址，给光敏校准值留12字节的空间*/
#define 		PARAMETER_ADDRESS	(RIDING_ADDRESS + 64)   					    /*参数区存储起始地址，给骑行信息留64字节的空间*/

/******************************************************************************
* 类型定义 ('typedef')                                         
******************************************************************************/
#pragma pack(1)
typedef struct
{
	uint8_t		Ver;				/*参数版本号*/
	uint8_t		Volt;				/*当前系统电压值*/
	uint16_t	V_36_Tab[10];		/*36V系统电压分段值*/
	uint16_t	V_48_Tab[10];		/*48V系统电压分段值*/
	uint16_t	V_52_Tab[10];		/*52V系统电压分段值*/
	uint8_t		V_BMS_Tab[10];		/*电量百分比分段值*/
	uint8_t		Backlight;			/*背光亮度等级*/
	uint8_t		Unit;				/*单位类型*/
	uint8_t		Password_Start_En;	/*开机密码是否使能*/
	uint16_t	Password_Start;		/*默认开机密码*/
	uint8_t		Password_Setting_En;/*设置密码是否使能*/
	uint16_t	Password_Setting;	/*默认设置密码*/
	uint8_t		Wheel_Diameter;		/*轮径*/
	uint16_t	Speed_Limit;		/*默认限速值（倍率10）*/
	uint8_t		Pas_Min;			/*档位范围下限*/
	uint8_t		Pas_Max;			/*档位范围上限*/
	uint8_t		Pas_Def;			/*开机默认档位*/
	uint16_t	Current_Limit;		/*默认限流值（倍率10）*/
	uint8_t		Assistant_Num;		/*助力磁钢数*/
	uint8_t		Assistant_Dir;		/*助力方向*/    
	uint8_t		Speed_Sensor_Num;	/*测速磁钢数*/
	uint8_t		Sensitivity;		/*助力灵敏度*/
	uint8_t		Start_Strength;		/*缓启动参数（启动强度）*/
	uint8_t		Assistant_Strength;	/*助力强度*/   
	uint8_t		Drive_Mode;	        /*驱动模式*/    
	uint8_t		Push_En;			/*是否使能助推*/
	uint16_t	Idle_Time;			/*无操作后的关机时间，单位：分钟*/
	uint8_t 	Mode;				/*骑行模式*/
	uint8_t		SOC_Type;			/*电量显示方式，0-百分比，1-电压值*/
	uint8_t		AL_Sensitivity;		/*光感灵敏度*/
    uint8_t     PWM0_3[3];          /*0-3和1-3档时每档的PWM值*/
    uint8_t     PWM0_5[5];          /*0-5和1-5档的每档PWM值*/
    uint8_t     PWM0_7[7];          /*0-7和1-7档的每档PWM值*/
    uint8_t     PWM0_9[9];          /*0-9和1-9档的每档PWM值*/
    uint8_t     Throttle_PAS;       /*转把分档*/
    uint8_t     Throttle_6KM;       /*转把助推*/	
    uint8_t     Class_type;         /*骑行模式*/
    uint16_t	Handle_Speed_Limit; /*转把限速*/
    uint8_t     Clock_Type;         /*时钟类型*/
    uint16_t    UUIDCrc;            /*MC UUID CRC */    
    uint8_t     MC_Unit;            /*控制器默认单位*/      
}stPARAM;

typedef struct
{
	uint8_t  		Ver;				/*版本号*/
	uint64_t 		ODO;				/*ODO里程，单位：分米*/
	uint64_t 		Trip;				/*Trip里程，单位：分米*/
	uint32_t 		Total_Time;			/*总计骑行时间，单位秒*/
	uint32_t 		Riding_Time;		/*小计骑行时间，单位秒*/
	uint16_t	 	Speed_Max;			/*最高速度*/
	uint16_t	 	Speed_Avg;			/*平均速度*/
    uint32_t        Service_Milage;     /*剩余服务里程，单位：0.1Km*/
}stRIDING;

#pragma pack()

typedef enum
{
	ConfigInfo = 0,
	RidingInfo,
	VoltRef,
	PhotoDiode,
}enPARAM_TYPE;


/******************************************************************************
* 全局变量声明 
******************************************************************************/
extern stPARAM		gtParam;
extern stRIDING		gtRiding;
extern uint32_t		gulVolt_Ref;
extern uint16_t		gusPhotoDiode_ADC_Value;
extern uint8_t      gucClassType;
extern uint8_t      gucUnit;
/******************************************************************************
* 函数声明 
******************************************************************************/
void vParam_Read(void * pParam,enPARAM_TYPE type);
void vParam_Write(void * pParam,enPARAM_TYPE type);
void vParam_ResetConfig(stPARAM * pParam);
void vParam_ResetRiding_With_ODO(stRIDING * pParam);
void vParam_ResetRiding_Without_ODO(stRIDING * pParam);
void vParam_ErasureResetFlag(void);
void vInit_Parameter(void);
#endif
